// 导入项目中用到的所有全局组件↓
import svgIcon from '@/components/svgIcon/index.vue'
import Pagination from '@/components/pagination/index.vue'
import Category from '@/components/category/index.vue'
console.log(svgIcon) // 控制台中输出组件对象：{__name: 'index', props: {…}, __hmrId: 'e7f7535e', setup: ƒ, render: ƒ, …}
console.log(Pagination) // 控制台中输出组件对象：{__hmrId: '8c60cd3a', __file: 'D:/vue3study/The-Project-for-Silicon-Valley-Select…tion-Platform/src/components/Pagination/index.vue', render: ƒ}
// const allGlobalComponent = {svgIcon:svgIcon,Pagination:Pagination}
// 导入“Element-Plus”组件库提供的所有的“图标组件”↓
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
console.log(ElementPlusIconsVue) // Module{...}（控制台中输出的内容是一个包含所有图标组件的对象，key是“组件名”，value是“组件对象”）
// 注：下面的这一行代码使用了对象属性的简写语法，它等同于：const allGlobalComponent = {svgIcon:svgIcon,Pagination:Pagination}↓
// 构建“全局组件对象”↓
const allGlobalComponent = {svgIcon,Pagination,Category}
// 对外导出“自定义插件对象”↓
export default {
    /* 注：1.在入口文件（“main.js”或“main.ts”）中通过“Vue.use()”（Vue2）或“app.use()”（Vue3）方法使用自定义插件（即安装自定义插件对象）时，会执行这里的 install方法（另注：为保证插件能被顺利地安装，方法名必须是“install”）
           2.该方法会把“vue实例对象”（vue或vm）（Vue2）或“应用程序实例对象（app）”（Vue3）作为参数注入（回传）↓ */
    install(app) {
        // 自定义插件逻辑↓
        // console.log(app) // {_uid: 0, _component: {…}, _props: null, _container: null, _context: {…}, …}
        // 遍历“全局组件对象”↓
        Object.keys(allGlobalComponent).forEach((key) => {
            console.log(key) // svgIcon Pagination
            // 注册全局组件↓
            app.component(key, allGlobalComponent[key])
        })
        // 把“Element-Plus”组件库提供的所有的“图标组件”注册为全局组件↓
        for(const[key,component]of Object.entries(ElementPlusIconsVue)){
            app.component(key, component)
        }
    }
}
